﻿using FluentValidation;
using Module.Test.Domain.Commands.Customs;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Module.Test.Domain.Validations.Customs
{

    /// <summary>
    /// 定义基于 CustomCommand 的抽象基类 CustomValidation
    /// 继承 抽象类 AbstractValidator
    /// 注意需要引用 FluentValidation
    /// 注意这里的 T 是命令模型
    /// </summary>
    /// <typeparam name="T">泛型类</typeparam>
    public abstract class CustomValidation<T> : AbstractValidator<T> where T : CustomCommand
    {
        protected void ValidateId()
        {
            //定义规则，c 就是当前 CustomCommand 类
            RuleFor(c => c.Id)
                .NotEmpty().WithMessage("Id不能为空")//判断不能为空，如果为空则显示Message
                .Must(m => m > 0).WithMessage("Id必须大于0");
        }
        protected void ValidateName()
        {
            //定义规则，c 就是当前 CustomCommand 类
            RuleFor(c => c.Name)
                .NotEmpty().WithMessage("名称不能为空")//判断不能为空，如果为空则显示Message
                .Length(1, 10).WithMessage("名称在{0}~{1}个字符之间");//定义 Name 的长度
        }


        protected void ValidateCreatedTime()
        {
            RuleFor(c => c.CreatedTime)
                .NotEmpty()
                .WithMessage("时间不能为空！");
        }
    }
}
